package main

import "fmt"

// 测试panic和recover在defer中的使用

func main() {
	defer func() {
		fmt.Println("b")
	}()

	defer func() {
		if err := recover(); err != nil { // recover()函数必须和defer一起用
			fmt.Println("捕获异常：", err)
		}
	}()

	defer func() {
		fmt.Println("c")
	}()

	panic("a")
}

// 返回：
// c
// 捕获异常： a
// b

// 1. 在panic之前注册的defer都可以执行；
// 2. 如果defer中有recover，会捕获panic异常，防止程序崩溃；
// 3. 并不是所有的panic都会被recover捕获到，如map的并发读写，参考defer6.go。
